package com.xpxrule.strategy.field;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xpxrule.dataobject.base.Range;
import com.xpxrule.util.FieldUtil;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

/**
 * 时间类型字段均采用时间戳处理
 */
public class DateTypeStrategy extends FieldTypeStrategy<Long>{
    @Override
    String convertToDisplayText(Long value) {
        if (value == null) {
            return null;
        }
        int length = String.valueOf(value).length();
        if (length == 10) {
            value = value * 1000;
        }
        Date date = new Date(value);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getDefault());
        return sdf.format(date);
    }

    @Override
    String classConvertToString(Object value) {
        if (value == null) {
            return null;
        }
        String valueStr = String.valueOf(value);
        /**
         * 判断valueStr符合的时间格式，如果不是则返回null
         * 时间格式包含：yyyy-MM-dd HH:mm:ss、  yyyy-MM-dd、 yyyy/MM/dd HH:mm:ss、    yyyy/MM/dd、时间戳
         */
        if (FieldUtil.isLegalDateFormat(valueStr)) {
            return valueStr;
        } else {
            return null;
        }
    }

    @Override
    Long stringConvertClass(String value) {
        if (StringUtils.isEmpty(value)) {
            return null;
        }
        return FieldUtil.parseStringToDate(value).getTime();
    }

    @Override
    Long[] getFieldObjectByRangeValue(Range<String> rangeValue) {
        return new Long[0];
    }

    @Override
    Long getFieldObjectByListValue(List<String> listValue) {
        return null;
    }

}
